package vip.zhenzicheng.test.jvm;

import org.openjdk.jol.info.ClassLayout;

import java.time.LocalDate;

/**
 * @author zhenzicheng
 * @date 2022-09-11 14:35
 */
public class ObjectModelCase {

  /**
   * JDK 11环境指定 VM参数：{@code -Djdk.attach.allowAttachSelf} 防止 warning
   * <p>通过参数: {@code -XX:MaxTenuringThreshold} 可以指定分代年龄
   * <p>通过参数: {@code -XX:+PrintCommandLineFlags -version} 可以在虚拟机启动时打印出所有使用的 VM 参数
   * <p>通过参数：{@code -XX:-UseCompressedClassPointers} 关闭指针压缩，实际工作中不推荐
   */
  public static void main(String[] args) {
    // VM 详细信息
    // System.out.println(VM.current().details());
    // 对象对齐方式
    // System.out.println("对齐填充为: " + VM.current().objectAlignment());

    // 默认空对象占多大？
    // 注意指针压缩
    Object o = new Object();
    System.out.println(ClassLayout.parseInstance(o).toPrintable());

    // User user = new User();
    // System.out.println(ClassLayout.parseInstance(user).toPrintable());
  }
}

class User {
  private Integer id;
  private int age;
  private boolean hasHair;
  private String name;
  private LocalDate birthday;
}